package com.lw;

import java.util.Random;

/**
 * 初始化地雷
 */
public class BottomRay {

    //存放坐标
    static int[] rays = new int[GameUtil.RAY_MAX*2];

    //地雷坐标
    int x,y;

    //是否放置 true可以放置
    boolean isPlace = true;

    public BottomRay() {
    }

    Random random = new Random();
    public void newRay2(){
        x = random.nextInt(1,GameUtil.MAP_W);//[1,Map_w)
        y = random.nextInt(1,GameUtil.MAP_H);

        int putFlag = random.nextInt(3,8);//[3,8)

        int index = 0;
        boolean isFirst = true;//首次遍历地图

        int leftRay = GameUtil.RAY_MAX;//剩余雷数量

        //遍历地图
        for (int i = x+1; i <= GameUtil.MAP_W; i++) {
            for (int j = y+1; j <= GameUtil.MAP_H; j++) {
                int flag = random.nextInt(10);
                if(flag>putFlag){//大于随机点，放置地雷
                    GameUtil.DATA_BOTTOM[i][j] = -1;
                    leftRay--;
                }

                if(j!=y&&j==GameUtil.MAP_H){//循环遍历，x,y随机的点可能在中间，遍历到尾部则从头开始
                    j = 0;
                }
                if(j==y||leftRay<=0) break; //如果遍历到之前随机的开始坐标，那说明已经重复了
            }

            if(i!=x&&x==GameUtil.MAP_W){
                i = 0;
            }
            if(i==x||leftRay<=0) break;
        }

        if(leftRay>0){//第一次遍历地图还有没有放置的地雷
            x = random.nextInt(1,GameUtil.MAP_W);//[1,Map_w)
            y = random.nextInt(1,GameUtil.MAP_H);
            for (int i = x+1; i <= GameUtil.MAP_W; i++) {
                for (int j = y+1; j <= GameUtil.MAP_H; j++) {
                    if(GameUtil.DATA_BOTTOM[i][j]==0){
                        GameUtil.DATA_BOTTOM[i][j] = -1;
                        leftRay--;
                    }

                    if(j!=y&&j==GameUtil.MAP_H){//循环遍历，x,y随机的点可能在中间，遍历到尾部则从头开始
                        j = 0;
                    }
                    if(j==y||leftRay<=0) break; //如果遍历到之前随机的开始坐标，那说明已经重复了

                }

                if(i!=x&&x==GameUtil.MAP_W){
                    i = 0;
                }
                if(i==x||leftRay<=0) break;

            }
        }
    }

    /**
     * 生成地雷
     */
    public void newRay(){
        //随机生成x,y的坐标
        for (int i = 0; i < GameUtil.RAY_MAX*2; i+=2) {
            x= (int) (Math.random()*GameUtil.MAP_W+1);//[1,Map_w+1)
            y= (int) (Math.random()*GameUtil.MAP_H+1);//[1,Map_h+1)

            for (int j = 0; j < i; j+=2) {//因为j<i，所以永远是遍历i之前的数据
                if(x==rays[j]&&y==rays[j+1]){//判断坐标是否已经存在
                    i = i-2;
                    isPlace = false;
//                    System.out.println(String.format("x:y-(%d,%d),rays:[%d,%d],j:%d",x,y,rays[j],rays[j+1],j));
                    break;
                }
            }

            if(isPlace){
                //存储格式为 [x,y,x,y,x,y,x,y....] 两组为一个坐标点，所以rays的长度要为 地雷个数*2，一个地雷有(x,y)
                rays[i] = x;
                rays[i+1] = y;
            }
            isPlace = true;

        }

        for (int i = 0; i < rays.length; i+=2) {
            GameUtil.DATA_BOTTOM[rays[i]][rays[i+1]] = -1;//-1表示此处为地雷
            
        }
    }



}
